/*
 * Copyright (c) 2012 SUBSECRETARIA DEFENSORIA DEL ESPACIO PUBLICO - SDEP.
 * All Rights Reserved.
 * This software is the confidential and proprietary information of SDEP
 * Developed By CONSTULT-SOFT S.A, Development Team 2012.
 *
 */
package co.gov.medellin.sdep.sisdep.domain.gestion;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import co.gov.medellin.sdep.sisdep.gestion.exception.ArticuloGrupoException;
import co.gov.medellin.sdep.sisdep.gestion.exception.ArticuloGrupoRuntimeException;
import co.gov.medellin.sdep.sisdep.gestion.service.IArticuloGrupoService;
import co.gov.medellin.sdep.sisdep.common.AppConstants;
import co.gov.medellin.sdep.sisdep.domain.BaseController;
import co.gov.medellin.sdep.sisdep.domain.MessageModalWindowController;
import co.gov.medellin.sdep.sisdep.model.ArticuloGrupo;

/**
 * @author Usuario
 * 
 */
public class ArticuloGrupoController extends BaseController implements
		Serializable {

	/**
	 * generated serial version
	 */
	private static final long serialVersionUID = -3285110767384990403L;

	/**
	 * Constructor por defecto, inicializa los elemento basicos del Controlador
	 */
	public ArticuloGrupoController() {
		cleanSearchValues();
		cleanValues();
	}

	/** bean para el manejo del formulario de busqueda ArticuloGrupo */
	private ArticuloGrupo articuloGrupoSearch = new ArticuloGrupo();

	/** Objeto contenedor del listado de ArticuloGrupo luego de una consulta. */
	private DataModel articuloGrupoListModel;

	/** bean para el manejo del formulario de creacion/edicion. ArticuloGrupo */
	private ArticuloGrupo articuloGrupo = new ArticuloGrupo();

	/** instancia de servicio articuloGrupoService */
	private IArticuloGrupoService articuloGrupoService;

	// --------------------------------------------------------------------
	// --- metodos para atender acciones init()
	// --------------------------------------------------------------------

	public String initState() {
		cleanSearchValues();
		cleanValues();
		return AppConstants.ARTICULO_GRUPO_INIT_VIEW;
	}

	/**
	 * 
	 * @return String
	 */
	public String searchArticuloGrupoByKey() {
		String msg = "";
		try {
			List valores = null;
			valores = getArticuloGrupoService().load(1, 10,
					this.articuloGrupoSearch);
			this.articuloGrupoListModel.setWrappedData(valores);
		} catch (Exception e) {
			msg = e.getMessage();
			e.printStackTrace(System.err);
		}
		if (this.articuloGrupoListModel.getWrappedData() == null) {
			if(msg.equals("")){
				msg = AppConstants.NO_RECORDS_FOUND;
			}
		} else {
			if (((List) this.articuloGrupoListModel.getWrappedData()).isEmpty()) {
				msg = AppConstants.NO_RECORDS_FOUND;
			}
		}
		cleanSearchValues();
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage(msg, null, null);
		return AppConstants.ARTICULO_GRUPO_SEARCH_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String create() {
		String msg = AppConstants.DEFAULT_ERROR;
		try {
			if (this.articuloGrupo.getId().longValue() == 0L) {
				getArticuloGrupoService().insert(this.articuloGrupo);
				msg = AppConstants.SUCCESS_CREATE;
			}
		} catch (ArticuloGrupoException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (ArticuloGrupoRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		cleanValues();
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage("- Grupo de art\u00EDculos " + msg, null, null);
		return AppConstants.ARTICULO_GRUPO_SEARCH_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String update() {
		String msg = AppConstants.DEFAULT_ERROR;
		try {
			if (this.articuloGrupo.getId().longValue() != 0L) {
				getArticuloGrupoService().update(this.articuloGrupo);
				msg = AppConstants.SUCCESS_UPDATE;
			}
		} catch (ArticuloGrupoException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (ArticuloGrupoRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		cleanValues();
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage("- Grupo de art\u00EDculos " + msg, null, null);
		return AppConstants.ARTICULO_GRUPO_SEARCH_VIEW;
	}

	// --------------------------------------------------------------------
	// --- metodos para atender acciones end()
	// --------------------------------------------------------------------

	// --------------------------------------------------------------------
	// --- metodos para atender reglas de navegacion init()
	// --------------------------------------------------------------------

	/**
	 * 
	 */
	public String createArticuloGrupo() {
		articuloGrupo = new ArticuloGrupo();
		cleanValues();
		return AppConstants.ARTICULO_GRUPO_CREATE_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String updateArticuloGrupo() {
		Map params = getExternalContext().getRequestParameterMap();
		String articuloGrupoDataIndex = (String) params
				.get("articuloGrupoDataIndex");
		this.articuloGrupo = (ArticuloGrupo) ((List) this.articuloGrupoListModel
				.getWrappedData())
				.get(Integer.parseInt(articuloGrupoDataIndex));
		cleanSearchValues();
		return AppConstants.ARTICULO_GRUPO_UPDATE_VIEW;
	}

	/**
	 *
	 * @return
	 */
	public String cancelArticuloGrupo() {
		cleanSearchValues();
		return AppConstants.ARTICULO_GRUPO_SEARCH_VIEW;
	}

	/**
	 *
	 * @return
	 */
	public String cancelSearchArticulo() {
		cleanSearchValues();
		cleanValues();
		return AppConstants.ARTICULO_GRUPO_SEARCH_CANCEL_VIEW;
	}
	
	/**
	 *
	 * @return
	 */
	public String cancelArticuloGrupoOpcion() {
		cleanValues();
		cleanSearchValues();
		return AppConstants.ARTICULO_GRUPO_SEARCH_VIEW;
	}

	/**
	 * limpia el contenido de los valores que se ingresan para buscar
	 */
	public final void cleanSearchValues(){
		articuloGrupoSearch.setCodigo("");
		articuloGrupoSearch.setNombre("");
		articuloGrupoSearch.setEstado("");
	}

	/**
	 * limpia el contenido de los valores que se ingresan (Create, Update)
	 */
	public final void cleanValues(){
		articuloGrupo.setId(new Long(0L));
		articuloGrupo.setCodigo("");
		articuloGrupo.setNombre("");
		articuloGrupo.setEstado("");
		this.articuloGrupoListModel = new ListDataModel();
	}

	// --------------------------------------------------------------------
	// --- metodos para atender reglas de navegacion end()
	// --------------------------------------------------------------------

	// --------------------------------------------------------------------
	// --- getters and setters init()
	// --------------------------------------------------------------------

	/**
	 * 
	 */
	public ArticuloGrupo getArticuloGrupoSearch() {
		return articuloGrupoSearch;
	}

	/**
	 * 
	 * @param articuloGrupoSearch
	 */
	public void setarticuloGrupoSearch(ArticuloGrupo articuloGrupoSearch) {
		this.articuloGrupoSearch = articuloGrupoSearch;
	}

	/**
	 * 
	 * @return
	 */
	public DataModel getarticuloGrupoListModel() {
		return articuloGrupoListModel;
	}

	/**
	 * 
	 * @param articuloGrupoListModel
	 */
	public void setarticuloGrupoListModel(DataModel articuloGrupoListModel) {
		this.articuloGrupoListModel = articuloGrupoListModel;
	}

	/**
	 * 
	 * @return
	 */
	public ArticuloGrupo getArticuloGrupo() {
		return articuloGrupo;
	}

	/**
	 * 
	 * @param articuloGrupo
	 */
	public void setarticuloGrupo(ArticuloGrupo articuloGrupo) {
		this.articuloGrupo = articuloGrupo;
	}

	/**
	 * obtencion del servicio articuloGrupoService
	 * 
	 * @return
	 */
	public IArticuloGrupoService getArticuloGrupoService() {
		return articuloGrupoService;
	}

	/**
	 * establecimiento del servicio articuloGrupoService, la inyeccion de la
	 * dependencia la cubre SpringFramework
	 * 
	 * @param articuloGrupoService
	 */
	public void setArticuloGrupoService(
			IArticuloGrupoService articuloGrupoService) {
		this.articuloGrupoService = articuloGrupoService;
	}

	// --------------------------------------------------------------------
	// --- getters and setters end()
	// --------------------------------------------------------------------

}
